iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
SideProject30

HOW TO GO系列 第 9

09. 模組&套件 (Modules & Packages)

  • 分享至 

  • xImage
  •  

Module

01. 基本入門&開發工具有使用到 go mod init 這個章節會介紹什麼是模組。我記得 約在 Go 1.15 就將此功能納入為正式工具且預設是啟用,非常建議新專案都使用此功能,方便管理該專案下的套件。

初始專案,成功的話會在當前目錄產生 go.mod 檔案

go mod init [module]

go.mod 檔案內容,會紀錄這個專案名稱及使用的 Go 版本,如果會將專案放置 GitHub 通常會依照以下的命名習慣(另外如果不使用指令,也可以手動建立 go.mod

module github.com/[user_name]/[project_name]

go 1.20

Package

一個 module 可以有多個 package,以 folder 為單位分成不同的 package,該 folder 的名稱就會是。概念上像是其他程式語言 namespace 的功能。

下載套件

go get [module]

範例:package scope

folder
|_ custom
   |_ math.go
|_ main.go

custom\math.go

package custom

// 只要 import custom 就可以使用
func Add(a, b int) int {
    return a + b
}

// 只有 package custom 範圍下可以使用
func addOne(a int) int {
    return a + 1
}

main.go

package main

// 引入自訂套件
import (
    // "[module]/custom"
    // 如果與其他套件撞名,可以另外取別名
    cs "[module]/custom"
    
    // 如果引入套件但是只需用到該套件 init() 可以使用忽略變數
    // _ "[module]/custom" 
)

func main() {
    // custom.Add(1, 2)
    cs.Add(1, 2)
}

內部套件

folder
|_ custom
   |_ math.go
|_ internal
   |_ util.go
|_ main.go

internal 是有特殊意義的資料夾,只能於這個專案內使用的套件,也就是說如果其他開發者使用 go get 這個模組時,也無法 import 到裡面提供的功能。

所以當一些內部實作不直接開放給其他開發者使用時,可以放在 internal 資料夾裡面。

補充 01. Module version

Module version numbering

補充 02. Standard project layout

Go 本身並沒有規定專案架構,這部分給開發者很大的自由,可以依據團隊的規範或個人的習慣來做調整。

如果沒有想法的,這裡有一些範例可以參考 GitHub Repo: Standard Go Project Layout


上一篇
08. Goroutine & Channel (2)
下一篇
10. 約定 (Convention)
系列文
HOW TO GO30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言